package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.doc.api.document.req.cargomanifest.TjBlnoCntrReportVO;
import com.cmc.cloud.cmclink.doc.api.document.req.cargomanifest.TjBlnoCntrReqVO;
import com.cmc.cloud.cmclink.doc.entity.BlnoCntrDO;
import com.cmc.cloud.cmclink.doc.vo.blnocntrvo.*;
import com.cmc.cloud.cmclink.doc.vo.blnolocalcostvo.BlnoCntrReportReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnolocalcostvo.BlnoCntrReportVO;
import com.cmes.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 提单货物信息 Service 接口
 *
 * @author 集运管理员
 */
public interface BlnoCntrService {

    /**
     * 创建提单货物信息
     *
     * @param createReqVO 创建信息
     */
    void createBlnoCntr(@Valid BlnoCntrCreateReqVO createReqVO);

    /**
     * 更新提单货物信息
     *
     * @param updateReqVO 更新信息
     */
    void updateBlnoCntr(@Valid BlnoCntrUpdateReqVO updateReqVO);

    /**
     * 删除提单货物信息
     *
     * @param id 编号
     */
    void deleteBlnoCntr(Long id);
    /**
     * 删除提单blnoId货物信息
     *
     * @param blnoId 编号
     */
    void deleteBlnoCntrByBlnoId(Long blnoId);

    /**
     * 获得提单箱信息
     *
     * @param blnoId 编号
     * @return 获得提单箱信息
     */
    List<BlnoCntrDO> getBlnoCntrByBlnoId(Long blnoId);


    /**
     * 获得提单箱信息
     *
     * @param blnoId 编号
     * @param bkgVesselCode 船名
     * @param bkgVoyage 航次
     * @return 获得提单箱信息
     */
    List<BlnoCntrUpdateReqVO> getBlnoCntrNewByBlnoId(Long blnoId,String bkgVesselCode,String bkgVoyage);

    /**
     * 获得提单货物信息
     *
     * @param ids 编号
     * @return 提单货物信息
     */
    List<BlnoCntrDO> getBlnoCntrByBlnoIds(Collection<Long> ids);

    /**
     * 获得提单货物信息
     *
     * @param blNo 提单号
     * @return 提单货物信息
     */
    List<BlnoCntrDO> getCntrByBlNo(String blNo);

    /**
     * 获得提单货物信息
     *
     * @param cntrNos 箱号
     * @return 提单货物信息
     */
    List<BlnoCntrDO> getBlnoCntrByCntrNos(Collection<String> cntrNos);

    /**
     * 获得提单货物信息
     *
     * @param id 编号
     * @return 提单货物信息
     */
    BlnoCntrDO getBlnoCntr(Long id);

    /**
     * 获得提单货物信息列表
     *
     * @param ids 编号
     * @return 提单货物信息列表
     */
    List<BlnoCntrDO> getBlnoCntrList(Collection<Long> ids);

    /**
     * 获得提单货物信息分页
     *
     * @param pageReqVO 分页查询
     * @return 提单货物信息分页
     */
    PageResult<BlnoCntrDO> getBlnoCntrPage(BlnoCntrPageReqVO pageReqVO);

    /**
     * 创建 修改 删除 SI 箱信息
     *
     * @param blnoId blnoId
     * @param newList 修改
     * @param oldList 原信息
     */
    void createOrUpdateAndDeleteBatch(Long blnoId, List<BlnoCntrUpdateReqVO> newList,
        List<BlnoCntrUpdateReqVO> oldList);

    /**
     * 检查箱号是否拼箱
     *
     * @param checkLclReqVO 检查参数
     * @return 检查结果
     */
    BlnoCntrCheckLclRespVO checkLcl(BlnoCntrCheckLclReqVO checkLclReqVO);

    /**
     *
     * @param reqVo reqVo
     * @return List<BlnoCntrReportVO>
     */
    PageResult<BlnoCntrReportVO> getBlnoCntrReport(BlnoCntrReportReqVO reqVo);

    /**
     * 天津报表箱数据统计
     * @param reqVo reqVo
     * @return TjBlnoCntrReportVO
     */
    TjBlnoCntrReportVO getTjBlnoCntr(TjBlnoCntrReqVO reqVo);
}
